CocoaPods Podfile

Podfile 语法改变

CocoaPods 1.0版本有一些改变, 会直接让现在已有的 Podfile 不能工作:

  • 必须指明 target
  • :exclusive => truelink_with 被去掉了
  • pod install 默认不再进行 pod repo update

inhibit_all_warnings!

inhibit_all_warnings! 屏蔽所有来自于cocoapods依赖库的警告。你可以全局定义,也能在子target里面定义,也可以指定某一个库:

# 隐藏SSZipArchive的警告而不隐藏ShowTVAuth的警告
pod 'SSZipArchive', :inhibit_warnings => true
pod 'ShowTVAuth', :inhibit_warnings => false

Build configurations(编译配置)

默认情况下, 依赖项会被安装在所有target的build configuration中。为了调试或者处于其他原因,依赖项只能在给定的build configuration中被启用。
下面写法指明只有在Debug和Beta模式下才有启用配置:

pod 'DebugFramework', :configurations => ['Debug', 'Beta']

或者,可以弄白名单只指定一个build configurations。

pod 'DebugFramework', :configuration => 'Debug'

Subspecs

一般情况我们会通过依赖库的名称来引入,cocoapods会默认安装依赖库的所有内容。
我们也可以指定安装具体依赖库的某个子模块,例如:

# 仅安装QueryKit库下的Attribute模块
pod 'QueryKit/Attribute'
# 仅安装QueryKit下的Attribute和QuerySet模块
pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']

Using the files from a local path (使用本地文件)

pod 'AFNetworking', :path => '~/Documents/AFNetworking'

有时我们需要引入依赖库指定的分支或节点,写法如下。

引入master分支(默认)

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'

引入指定的分支

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'

引入某个节点的代码

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'

引入某个特殊的提交节点

pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af

target

在给定的块内定义pod的target(Xcode工程中的target)和指定依赖的范围。一个target应该与Xcode工程的target有关联。默认情况下,target会包含定义在块外的依赖,除非指定不使用inherit!来继承(说的是嵌套的块里的继承问题)

定义一个简单target ZipApp引入SSZipArchive库

target 'ZipApp' do
pod 'SSZipArchive'
end

定义一个ZipApptarget仅引入SSZipArchive库,定义ZipAppTeststarget 引入Nimble的同时也会继承ZipApptarget里面的SSZipArchive库

target 'ZipApp' do
pod 'SSZipArchive'
target 'ZipAppTests' do
inherit! :search_paths
pod 'Nimble'
end
end

target块中嵌套多个子块

target 'ShowsApp' do
# ShowsApp 仅仅引入ShowsKit
pod 'ShowsKit'
# 引入 ShowsKit 和 ShowTVAuth
target 'ShowsTV' do
pod 'ShowTVAuth'
end
# 引入了Specta和Expecta以及ShowsKit
target 'ShowsTests' do
inherit! :search_paths
pod 'Specta'
pod 'Expecta'
end
end

抽象target

定义一个新的抽象目标,它可以方便的用于目标依赖继承。

简单写法

abstract_target 'Networking' do
pod 'AlamoFire'
target 'Networking App 1'
target 'Networking App 2'
end

定义一种abstract_target包含多个target

# 注意:这是个抽象的target也就是说在工程中并没有这个target引入ShowsKit
abstract_target 'Shows' do
pod 'ShowsKit'
# ShowsiOS target会引入ShowWebAuth库以及继承自Shows的ShowsKit库
target 'ShowsiOS' do
pod 'ShowWebAuth'
end
# ShowsTV target会引入ShowTVAuth库以及继承自Shows的ShowsKit库
target 'ShowsTV' do
pod 'ShowTVAuth'
end
# ShowsTests target引入了Specta和Expecta库,并且指明继承Shows,所以也会引入ShowsKit
target 'ShowsTests' do
inherit! :search_paths
pod 'Specta'
pod 'Expecta'
end
end

abstract! 和 inherit!

abstract! 指示当前的target是抽象的,因此不会直接链接Xcode target。
inherit! 设置当前target的继承模式。例如:

target 'App' do
target 'AppTests' do
inherit! :search_paths
end
end